<?php
/**
 * @package PAyMA
 * @subpackage package_name
 * @author Ricardo Santillan Reyes
 * @copyright (c) Instituto Tecnologico de Jiquilpan
 * @license Vea LICENCIA en el directorio raiz de este proyecto
 * @date Junio-Septiembre 2008
 * 
 * Optimizacion SEF (Search Engine Friendly Urls)
 */
//No se debe de solicitar de manera directa el acceso a este archivo
defined("_AS") or die("No se permite el acceso directo a este archivo");

class SEF{
	
	/** @var String Prefijo para saber que es una peticion SEF */
	var $prefijo_sef = '';
    /** @var array String Nombre de las acciones a reemplazar en las URL. P.e http://sitio.org/?mod=main 
     * <code>$tarea_sef['mod']='modulo';</code>
    */
    var $tarea_sef = array();
    // Traduccion de las url
    /** @var array String Caracteres a reemplazar en la URL */
    var $chr_reemplazo_sef = array();
    /** @var array String Caracteres de reemplazo SEF */
    var $chr_traducidos_sef = array();
    /** @var String Caracter de reemplazo para el espacio */
    var $ESPACIO_SEF;
    
    function SEF(){
    	$this->ESPACIO_SEF='_';
    	
    	$this->chr_reemplazo_sef=array('?','&','/',' ');
    	$this->chr_traducidos_sef=array('','and', ' or ',$this->ESPACIO_SEF);
    	
    	if(Clases::is_set('prefijo_sef')) $this->prefijo_sef=Clases::get('prefijo_sef');
    	else $this->prefijo_sef='sec';
    	

    	
    	//Acciones SEF
    	/*
    	$this->tarea_sef['mod']='modulo';
    	$this->tarea_sef['ver']='ver';
    	.
    	.
    	.
    	*/
    }
    
    function &getSEF(){
    	static $instancia;
    	if (!is_object($instancia)) $instancia = new SEF();
        return $instancia;	
    }
    
    function toUrl( $cadena ){
    	$acentuadas = "áéíóúÁÉÍÓÚüñÑ";
        $noacentuadas = "aeiouAEIOUunN";
        $string = strtr($cadena, $acentuadas, $noacentuadas);
        foreach ($this->chr_reemplazo_sef as $i=>$char) $string = str_replace($char, $this->chr_traducidos_sef[$i], $string);
        $string = urlencode($string);
        return $string;
    }
    
    function relAAbsoluto( $cadena ){
    	$servidor = Clases::get('sitio_vivo');
        if ($cadena == 'index.php') return $servidor.'/';
        if (strtolower(substr($cadena,0,9)) != 'index.php' OR eregi('^(([^:/?#]+):)',$cadena)) return $cadena;
        $anchor = '';
        if (preg_match('/#((.)+)$/',$cadena,$partes)){
            $anchor = $partes[1];
            $cadena = substr($cadena, 0, (strlen($anchor) + 1)*-1);
        }
        
        if((strpos( strtolower($cadena),"leng=") === false)) {
            $cadena .= "&leng=$iso_client_lang";
        }
        $passed_string = str_replace('&amp;', '&', $cadena);
        if (!Clases::get('sef_urls')) return $this->plusAnchor($servidor.'/'.str_replace( '&', '&amp;', $passed_string ),$anchor);
        $cadena = substr($passed_string,10);
        $modulo = $tarea = $params = '';
        parse_str($cadena, $params);
        foreach ($params as $key=>$val) {
            $lowkey = strtolower($key);
            $lowval = strtolower($val);
            $unset = true;
            switch ($lowkey) {
            	case 'modulo':
					$modulo = $lowval;
					break;
				default:
                    $check_params[$lowkey] = $key;
                    $unset = false;
            }
            if ($unset) unset($params[$key]);
        }
        
        if ($modulo == 'mod_main' OR $modulo == 'main') {
            /*
			Principal
            index.php?mod=main&sec=$sec&id=$id&leng=$leng...
            */
            $task = $this->tarea_sef[$task];
            $cont_sef = Clases::get('ruta_absoluta').'/modulos/mod_main/sef_ext.php';
            if (file_exists($cont_sef)) {
                require_once($cont_sef);
            }
            $keys = array('sec', 'id', 'leng');
            $string = '/main/';
            foreach ($keys as $key) {
                if (isset($check_params[$key])) {
                    $pkey = $check_params[$key];
                    $string .= $params[$pkey].'/';
                }
            }
            return $this->plusAnchor($servidor.$string,$anchor);
        }
    }
    
    function plusAnchor($sefString, $anchor){
        if ( substr($sefString,-1) == '/' ){
            $sefString = substr($sefString,0,-1);
            if ($anchor!=''){
                $sefString.="#{$anchor}";
            }else{
                $sefString.='/';
            }
        }
        return $sefString;
    }
}
?>
